Alt + O pour replier tout et ouvrir que ce qui est pertinent.

Package nécessaires à l’exécution de ce document :

Comment utiliser ce document : 1) Nettoyer votre environnement R de toutes ses variables (rm(list = ls())). 2) Exécuter chaque sous-fichier Rmd dans le dossier ‘sections’ (ceci crée des RData qu’on peut load) 3) Exécuter ce fichier Rmd après tous les autres.

Métadonnées

Dans metadata on a les facteurs hôtes.

head(metadata)
##   record_id sex age taille_cm poids code_postal pays_de_naissance
## 1         1   1  58       178   106       95230                66
## 2         2   2  30       169    76       75015                66
## 3         3   1  54       180    68       92000                66
## 4         4   2  58       163    55       75018                66
## 5         5   2  46       163    55       75010                66
## 6         6   2  58       170    78       92400                66
##   voie_accouchement allaitement nombre_foyer viandes_rouges
## 1                 3           3            1              2
## 2                 1           1            1              3
## 3                 3           3            5              3
## 4                 2           3            3              3
## 5                 2           2            1              3
## 6                 1           1            2              3
##   volailles_viandes_blanches charcuteries poissons_fruits_de_mer oeufs
## 1                          2            2                      2     3
## 2                          3            3                      2     3
## 3                          4            3                      1     3
## 4                          3            2                      3     4
## 5                          3            2                      3     3
## 6                          4            2                      3     3
##   fruits_legumes feculents aliments_complets legumes_secs yaourts fromages lait
## 1              5         2                 1            3       5        3    5
## 2              5         5                 5            3       4        4    4
## 3              4         5                 1            3       5        5    3
## 4              5         5                 6            3       5        5    5
## 5              5         5                 1            1       3        5    5
## 6              5         5                 4            2       5        4    4
##   cereales_petit_dejeuner produits_sucres_non_gras produits_sucres_gras
## 1                       4                        3                    3
## 2                       5                        5                    4
## 3                       1                        1                    5
## 4                       2                        2                    3
## 5                       5                        2                    2
## 6                       1                        3                    4
##   produits_sales_gras matieres_grasses boissons_sucrees vin_blanc_rouge biere
## 1                   3                5                1               1     1
## 2                   4                5                5               2     1
## 3                   1                5                2               2     2
## 4                   1                5                1               2     1
## 5                   2                5                2               4     2
## 6                   4                5                5               3     2
##   aperitifs_digestifs nombre_enfants type_mutuelle travailleur_social couple
## 1                   1           TRUE             1                  2      2
## 2                   2          FALSE             1                  2      2
## 3                   2           TRUE             1                  2      1
## 4                   2           TRUE             1                  1      1
## 5                   4          FALSE             1                  1      2
## 6                   2           TRUE             1                  2      2
##   proprietaire difficultes_financieres spectacle vacances contacts_famille aide
## 1            1                       2         2        2                1    1
## 2            2                       2         2        1                1    1
## 3            1                       2         2        1                1    1
## 4            1                       1         2        1                1    1
## 5            2                       2         2        2                1    1
## 6            2                       2         2        2                1    1
##   sport sport_frequence score_epices age_group precarity_group foyer_group
## 1     2               1        28.99  above_40    Non Précaire      Faible
## 2     1               2        23.66  below_40    Non Précaire      Faible
## 3     1               4         7.10  above_40    Non Précaire        Fort
## 4     1               4        31.96  above_40        Précaire        Fort
## 5     1               6        40.82  above_40        Précaire      Faible
## 6     1               1        30.76  above_40        Précaire      Faible
##   ville_group  sport_group regime
## 1    Banlieue Non fréquent      0
## 2       Paris Non fréquent      0
## 3    Banlieue     Fréquent     -1
## 4       Paris     Fréquent      1
## 5       Paris Non fréquent     -1
## 6    Banlieue Non fréquent      0

4 hôtes ont été évincés car ils n’ont pas fini la cohorte (dans to_exclude). Certaines variables ont été catégorisé en 2/3 classes pour gagner en puissance dans ce petit jeu d’hôtes.

Dans antibiotique on a les prises d’antibiotiques.

head(antibiotique)
##   record_id        redcap_event_name date_traitement   traitement
## 1         2  visite_dinclusion_arm_1      2020-12-25 nifuroxazide
## 2         5  visite_dinclusion_arm_1      2021-01-01      MONURIL
## 3        14 visite_de_suivi_s2_arm_1      2021-11-19  DOXYCYCLINE
## 4        22  visite_dinclusion_arm_1      2021-11-18  CEFTRIAXONE
## 5        28  visite_dinclusion_arm_1      2021-12-15    AUGMENTIN
## 6        42  visite_dinclusion_arm_1      2022-03-07  doxycycline
##   jours_traitement prises_traitement voie_traitement
## 1                1                 1               1
## 2                1                 1               1
## 3                5                 1               1
## 4                1                 1               1
## 5               15                 2               1
## 6               42                 1               1

Dans voyage on a les voyages.

head(voyage)
##   record_id        redcap_event_name date_voyage duree_voyage pays_voyage
## 1         2  visite_dinclusion_arm_1  2020-12-25            7          56
## 2         4  visite_dinclusion_arm_1  2020-10-26           13          60
## 3         9  visite_dinclusion_arm_1  2021-08-20           10          19
## 4        10  visite_dinclusion_arm_1  2021-06-12            4         172
## 5        12 visite_de_suivi_s8_arm_1  2021-12-18           17           4
## 6        15  visite_dinclusion_arm_1  2021-09-01           15         146

Réduction de la dimensionalité des déterminants hôtes

On a réduit la dimensionalité des données hôtes en clusterisant les individus par groupes alimentaires (haut en fibre, alcool et viande et équilibré), en suivant les résultats de cette heatmap.

heatmap_diet

Ces groupes alimentaires permettent de relativement bien séparer les individus sur une PCA faites avec les variables de régime alimentaire.

plot_pca_indiv_diet

On observe sur ce graphe que le régime équilibré est entre les deux autres (et ceci est aussi observé dans les autres axes). Ainsi on va garder cette relation d’ordre pour la variable régime.

Pour réduire la dimensionalité des variables de précarité nous avons calculé le score EPICES à partir de ces mêmes variables. C’est un bon indicateur de précarité comme le montre cette corrélation (toutes ne sont pas significatives car on a peu d’individus).

corrplot(res.cor.epices$r, p.mat = res.cor.epices$p.adj, sig.level = 0.1, tl.srt = 25, tl.cex   = .5, cl.length = 5)

En revanche l’exploration des habitudes alimentaires, de la précarité et des âges soulève un point important : tous nos hôtes vivent dans un environnement socio-économique proche. Ceci fait qu’il n’y a pas tant de différences que ça sur les âges et sur les habitudes alimentaires ce qui pourra avoir des conséquences sur la significativité de nos résultats. Typiquement voici les distributions de l’âge et du score EPICES (celui-ci est clairement biaisé envers les non précaires < 30).

grid.arrange(plot_distrib_age, plot_distrib_epices)

Corrélations et effets de chaque déterminants sur chacun

On a plot toutes les relations entre les variables intéressantes. J’ai mis tout ça dans un pdf.

Les corrélations qui en ressortent sont :

  • Poids et âge *
  • Poids et sexe *
  • Poids et nombre d’enfants *
  • Sexe et régime *
  • Sexe et nombre foyer .
  • Age et allaitement ** (les gens âgés ont oublié et sont sur représentés en 3, pas le cas pour l’accouchement)
  • Age et nombre d’enfants *** (les gens âgés ont un enfant)
  • Accouchement et allaitement *** (plus de gens qui ont oublié comment ils ont été allaité que comment ils sont nés. Souvent les gens ont oublié les deux si jamais ils ont oublié l’un.)
  • Allaitement et nombre d’enfants ** (les gens qui ne savent pas sont majoritairement des gens qui ont un enfant, âgés quoi)
  • Allaitement et régime * (les gens allaitées par leur mère sont sur représentés dans le régime équilibré)

Code : “***” Tres significatif (d’après moi); … ; “.” piste

Nous allons maintenant utiliser ces données hôtes pour voir si elles ont une influence sur l’écologie des E. coli commensales. Avant, nous explorons un peu la cohorte en elle même.

Cohorte longitudinale

La cohorte est résumée dans le dataframe longitudinal_strain, où chaque ligne correspond à l’observation d’une bactérie avec leurs caractéristiques.

head(longitudinal_strain)
## # A tibble: 6 × 15
## # Groups:   host [1]
##   host  id.clone group mlva    density log.density dens.self log.dens.self
##   <fct> <fct>    <chr> <chr>     <dbl>       <dbl>     <dbl>         <dbl>
## 1 1     26       D.1   26        0.926     -0.0770     0.370        -0.993
## 2 1     23       F     23      106.         4.67      84.9           4.44 
## 3 1     27       A.1   27      627.         6.44     501.            6.22 
## 4 1     18       B1    18      627.         6.44     125.            4.83 
## 5 1     19       B1    19    14762.         9.60    2952.            7.99 
## 6 1     20       B1    20    29313.        10.3     5863.            8.68 
## # ℹ 7 more variables: date_min <date>, date_max <date>, dates_samples <list>,
## #   residency <dbl>, resident_status <lgl>, time_since_start <dbl>,
## #   time_max <dbl>

Visualisation de la cohorte

On peut commencer par résumer un peu la cohorte avec quelques statistiques descriptives.

tbl_summary(dplyr::select(longitudinal_strain, log.density, log.dens.self, group, host, residency, resident_status), by = group)
Characteristic A.1
N = 86
1
A.2
N = 73
1
B1
N = 74
1
B2.1
N = 4
1
B2.2
N = 13
1
B2.3
N = 67
1
C
N = 5
1
D.1
N = 48
1
D.2
N = 17
1
E
N = 19
1
F
N = 13
1
G
N = 2
1
log.density 6.90 (5.81, 7.79) 6.91 (6.01, 8.23) 7.19 (6.24, 8.17) 7.75 (6.09, 9.42) 7.14 (4.42, 8.71) 6.95 (5.94, 8.27) 8.99 (5.45, 9.02) 6.60 (5.40, 7.60) 6.19 (5.05, 7.00) 6.81 (5.15, 7.51) 7.41 (5.75, 8.06) 7.25 (5.93, 8.56)
    Unknown 2 2 0 0 1 1 0 2 0 0 1 0
log.dens.self 5.69 (4.45, 6.73) 5.96 (4.59, 7.11) 6.18 (4.89, 7.37) 6.83 (4.48, 9.31) 6.34 (3.22, 7.24) 6.25 (5.30, 7.89) 7.38 (3.84, 7.42) 5.71 (4.48, 6.69) 4.74 (3.75, 6.49) 5.23 (3.67, 6.62) 6.51 (5.12, 7.94) 6.33 (4.32, 8.34)
    Unknown 2 2 0 0 1 1 0 2 0 0 1 0
host











    1 4 (4.7%) 1 (1.4%) 5 (6.8%) 0 (0%) 0 (0%) 0 (0%) 1 (20%) 1 (2.1%) 0 (0%) 0 (0%) 1 (7.7%) 0 (0%)
    2 4 (4.7%) 1 (1.4%) 3 (4.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.1%) 2 (12%) 0 (0%) 0 (0%) 1 (50%)
    3 1 (1.2%) 0 (0%) 1 (1.4%) 0 (0%) 0 (0%) 3 (4.5%) 0 (0%) 3 (6.3%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    4 1 (1.2%) 2 (2.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    5 1 (1.2%) 0 (0%) 3 (4.1%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (7.7%) 0 (0%)
    6 0 (0%) 0 (0%) 2 (2.7%) 1 (25%) 0 (0%) 1 (1.5%) 0 (0%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    7 1 (1.2%) 2 (2.7%) 2 (2.7%) 0 (0%) 1 (7.7%) 1 (1.5%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    8 0 (0%) 0 (0%) 2 (2.7%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 0 (0%) 2 (12%) 4 (21%) 6 (46%) 0 (0%)
    9 0 (0%) 2 (2.7%) 2 (2.7%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 1 (2.1%) 2 (12%) 1 (5.3%) 0 (0%) 0 (0%)
    10 6 (7.0%) 4 (5.5%) 4 (5.4%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.1%) 2 (12%) 1 (5.3%) 1 (7.7%) 0 (0%)
    12 2 (2.3%) 1 (1.4%) 6 (8.1%) 0 (0%) 1 (7.7%) 0 (0%) 0 (0%) 1 (2.1%) 1 (5.9%) 0 (0%) 0 (0%) 0 (0%)
    13 1 (1.2%) 1 (1.4%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (20%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    14 2 (2.3%) 4 (5.5%) 1 (1.4%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    15 3 (3.5%) 1 (1.4%) 2 (2.7%) 0 (0%) 2 (15%) 0 (0%) 0 (0%) 3 (6.3%) 0 (0%) 0 (0%) 1 (7.7%) 0 (0%)
    16 1 (1.2%) 1 (1.4%) 0 (0%) 0 (0%) 0 (0%) 3 (4.5%) 1 (20%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    17 1 (1.2%) 0 (0%) 1 (1.4%) 0 (0%) 0 (0%) 5 (7.5%) 0 (0%) 3 (6.3%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    19 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (7.7%) 3 (4.5%) 0 (0%) 0 (0%) 1 (5.9%) 0 (0%) 0 (0%) 0 (0%)
    20 0 (0%) 7 (9.6%) 2 (2.7%) 0 (0%) 0 (0%) 5 (7.5%) 1 (20%) 0 (0%) 0 (0%) 2 (11%) 0 (0%) 0 (0%)
    21 1 (1.2%) 4 (5.5%) 5 (6.8%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 1 (2.1%) 0 (0%) 1 (5.3%) 0 (0%) 0 (0%)
    22 2 (2.3%) 0 (0%) 1 (1.4%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 3 (6.3%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    23 4 (4.7%) 1 (1.4%) 3 (4.1%) 0 (0%) 1 (7.7%) 3 (4.5%) 0 (0%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    24 3 (3.5%) 1 (1.4%) 1 (1.4%) 0 (0%) 0 (0%) 5 (7.5%) 0 (0%) 4 (8.3%) 0 (0%) 3 (16%) 0 (0%) 0 (0%)
    26 0 (0%) 1 (1.4%) 2 (2.7%) 0 (0%) 0 (0%) 2 (3.0%) 0 (0%) 2 (4.2%) 0 (0%) 1 (5.3%) 0 (0%) 0 (0%)
    27 5 (5.8%) 0 (0%) 0 (0%) 1 (25%) 0 (0%) 0 (0%) 0 (0%) 2 (4.2%) 2 (12%) 0 (0%) 1 (7.7%) 0 (0%)
    28 1 (1.2%) 2 (2.7%) 0 (0%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    29 7 (8.1%) 1 (1.4%) 1 (1.4%) 0 (0%) 1 (7.7%) 1 (1.5%) 0 (0%) 2 (4.2%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    30 2 (2.3%) 1 (1.4%) 4 (5.4%) 0 (0%) 1 (7.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (5.3%) 1 (7.7%) 0 (0%)
    31 3 (3.5%) 3 (4.1%) 1 (1.4%) 0 (0%) 0 (0%) 2 (3.0%) 0 (0%) 1 (2.1%) 0 (0%) 1 (5.3%) 0 (0%) 1 (50%)
    32 5 (5.8%) 2 (2.7%) 1 (1.4%) 0 (0%) 0 (0%) 2 (3.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    33 4 (4.7%) 1 (1.4%) 0 (0%) 1 (25%) 1 (7.7%) 4 (6.0%) 0 (0%) 2 (4.2%) 1 (5.9%) 0 (0%) 0 (0%) 0 (0%)
    34 5 (5.8%) 4 (5.5%) 3 (4.1%) 0 (0%) 0 (0%) 0 (0%) 1 (20%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    35 0 (0%) 5 (6.8%) 0 (0%) 0 (0%) 0 (0%) 3 (4.5%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    36 2 (2.3%) 1 (1.4%) 2 (2.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.1%) 0 (0%) 1 (5.3%) 0 (0%) 0 (0%)
    37 2 (2.3%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (3.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    38 1 (1.2%) 1 (1.4%) 2 (2.7%) 0 (0%) 0 (0%) 3 (4.5%) 0 (0%) 1 (2.1%) 1 (5.9%) 0 (0%) 0 (0%) 0 (0%)
    39 0 (0%) 0 (0%) 1 (1.4%) 0 (0%) 1 (7.7%) 1 (1.5%) 0 (0%) 1 (2.1%) 0 (0%) 1 (5.3%) 0 (0%) 0 (0%)
    40 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    42 2 (2.3%) 0 (0%) 4 (5.4%) 1 (25%) 0 (0%) 3 (4.5%) 0 (0%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    43 3 (3.5%) 3 (4.1%) 2 (2.7%) 0 (0%) 0 (0%) 3 (4.5%) 0 (0%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    44 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (1.5%) 0 (0%) 2 (4.2%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    45 3 (3.5%) 6 (8.2%) 1 (1.4%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (4.2%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    46 0 (0%) 2 (2.7%) 0 (0%) 0 (0%) 2 (15%) 2 (3.0%) 0 (0%) 1 (2.1%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    47 0 (0%) 2 (2.7%) 1 (1.4%) 0 (0%) 1 (7.7%) 1 (1.5%) 0 (0%) 1 (2.1%) 0 (0%) 2 (11%) 0 (0%) 0 (0%)
    48 2 (2.3%) 3 (4.1%) 1 (1.4%) 0 (0%) 0 (0%) 2 (3.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    49 0 (0%) 1 (1.4%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.1%) 2 (12%) 0 (0%) 1 (7.7%) 0 (0%)
    50 1 (1.2%) 1 (1.4%) 2 (2.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.1%) 1 (5.9%) 0 (0%) 0 (0%) 0 (0%)
residency 14 (14, 14) 14 (14, 42) 14 (14, 14) 14 (14, 14) 14 (14, 14) 28 (14, 57) 14 (14, 14) 28 (14, 71) 14 (14, 27) 14 (14, 14) 28 (14, 70) 14 (14, 14)
resident_status 7 (8.1%) 22 (30%) 12 (16%) 0 (0%) 3 (23%) 35 (52%) 0 (0%) 26 (54%) 6 (35%) 2 (11%) 9 (69%) 0 (0%)
1 Median (Q1, Q3); n (%)

On observe que les valeurs de densité totale (combien de bactéries dans les 5 samples) sont assez variables en fonction des hôtes. On voit aussi qu’en moyenne la densité de chaque souches est proche de la densité totale, ceci indique chez chaque hôte un sample est présent en grande quantité, c’est la souche résidente.

On voit aussi une diversité des différents phylogroupes chez chaque hôte mais aussi entre les hôtes (qui ne partagent pas du tout les mêmes phylogroupes).

On voit que chaque hôte possède quelques souches résidentes pendant la cohorte et beaucoup de souches transientes. Ceci rejoint les schémas déjà observés par d’autres études.

Le temps de résidence en lui même varie entre les hôtes, ceci va nous permettre de l’expliquer avec les facteurs de metadata par la suite.

Nous allons maintenant effectuer quelques visualisations pour aider à la compréhension et creuser les premières intuitions.

On va visualiser la cohorte en colorant par phylogroupe.

plot_cohort_phylogroup_2

Cette visualisation confirme bien l’intuition que chaque hôte possède quelques souches résidentes et plusieurs souches transientes qui alternent.

On observe que chez certains de nos hôtes il n’y a pas de souches résidentes longues, chez d’autres aucune transiente. Il semble y avoir des différences entre les résidentes. Certaines restent beaucoup plus longtemps que d’autres. Dans la suite nous nous intéresserons aussi à ce “clonal turnover” des souches résidentes.

On observe une palette assez large de couleur chez chaque hôte et entre les hôtes. Ceci témoigne de la forte diversité des E. coli au niveau du phylogroupe durant la cohorte. C’est un indicateur qu’il faudrait creuser.

On remarque que certains phylogroupes ont des propensions à être résidents, d’autres transients. De plus, c’est souvent les mêmes phylogroupes réinfectent transitoirement chaque hôte. On sait (grâce à la précision clonale) que ce n’est pas les mêmes souches ce qui pousserait à dire qu’il existe soit un environnement le poussant soit des effets génétiques venant de l’hôte et/ou de la bactérie.

On peut aussi voir que certaines souches quand elles sont résidentes sont souvent accompagnées des mêmes transientes, et ceux dans plusieurs hôtes indépendamment. Exemple, quand une souche A.2 est résidente on retrouve systématiquement des souches A.1 ou D.1. Les dynamiques de co-portage sont donc un autre indicateur qu’il faudrait creuser afin de chercher des dynamiques de coopération ou d’exclusion entre les souches (ce qui ne serait pas tout à fait étonnant).

Chose un peu plus étonnante, on observe que souvent à un évènement de sample donnée on a beaucoup de transientes du même phylogroupe. Infectent elles ensemble ou autre chose…

Enfin, on voit qu’après certains traitements antibiotiques (triangle rouge) ou voyage (rond bleu) on a des évènements de remplacement de souches résidentes et des évènements de diversification (avec apparition de nouveaux phylogroupes).

Dans la suite nous étofferons cette partie avec les autres indicateurs et descripteurs de la cohorte.

Dynamiques de E. coli et déterminants hôte / bactérien

Nous allons dans cette partie lier les descripteurs de la cohorte aux facteurs hôtes présentés en première partie. Nous allons commencer par la résidence puis nous nous pencherons sur la diversité.

Résidence et facteurs hôtes

Cette partie devrait apporter des réponses au premier point d’investigation de la review de Martinson et al.

Pour expliquer la résidence avec les facteurs hôtes nous allons utiliser 3 approches :

  • Explication des temps de résidence par ANOVA ou via modèle linéaire mixte.
  • Explication du statut résident / transient avec un modèle logistique mixte.
  • Explication du nombre d’occurrences de chaque souches chez un hôte via un modèle de type zero-inflated.

C’est le dataframe longitudinal_strain_host qui décrit à chaque ligne une souche bactérienne avec les caractéristiques de son hôte. Celui ci sera utilisé comme base des trois voies.

Temps de résidence et facteurs hôtes

Représentons d’abord comment se distribue la résidence.

plot_distrib_residency

On observe une distribution ayant un poids majoritaire autour des temps de résidences à 14 jours, ce qui correspond aux transientes qui sont majoritaires.

Certains phylogroupes sont connus pour abriter des bactéries plutôt transientes ou plutôt résidentes. Ainsi, il peut être intéressant de diviser chaque temps de résidence par la moyenne intraphylogroupe du temps de résidence. Par cette action nous gommons en quelque sorte l’effet phylogroupe qui ne nous intéresse guère dans nos explications (et pourrait empêcher de révéler des dynamiques sous jacentes mais assez faibles).

Pour donner un aspect plus “normal” à nos données nous pouvons les log-transformer (on transforme en log(temps + 1) afin de n’avoir que des valeurs positives.) ce qui donne au final la distribution des temps de résidence suivante.

plot_distrib_residency_log_scaled

Maintenant qu’on voit que les temps de résidences varient on va pouvoir essayer de les expliquer.

Plusieurs approches peuvent être menées. D’abord, et la plus exploratoire, nous pouvons représenter les différences de temps de résidences entre nos variables partitionant nos hôtes en plusieurs groupes (anova et corrélation). Ensuite, nous pourrons prendre les temps de résidence comme une variable aléatoire à expliquer et trouver quels sont les variables hôtes qui l’explique (régression multiple avec effet mixte).

Différences en moyennes des temps de résidence en fonction des facteurs hôtes

Nous avons comparé à chaque fois trois temps de résidence : temps de résidences non modifiés, temps de résidences sans effet phylogroupe, log-scalé sans effet phylogroupe.

On a aussi à chaque fois comparer sans et avec les transientes.

On ne montre ici que les plots où les corrélations / anova semblait donner une relation intéressante.

Voici les plus intéressantes :

Temps de résidence et phylogroupes
plot_residency_phylogroup

On observe que certains phylogroupes ont plus des moyennes plus élevées que les autres. Ce sont les phylogroupes classiquement défini comme résident. Les autres sont les transients. Chacun des deux types de phylogroupes possèdent des souches qui vont avoir soit un mode de vie résident soit transient.

Mon hypothèse est que c’est vraiment le statut résident / transient qui est affecté par le phylogroupe et pas les temps de résidence directement (ie la capacité à rester une fois installé).

En témoigne les boxplot quand on ne prend que les souches résidentes :

plot_residency_resident_phylogroup

On voit que même chez les phylogroupes transients, les souches qui arrivent à s’installer peuvent rester aussi longtemps en moyenne que les souches résidentes des phylogroupes résidents.

Temps de résidence et densité propre des souches

En prenant toutes les souches :

plot_residency_dens_self

Il existe une corrélation positive entre la densité propre d’une souche et son temps de résidence.

Quand on ne prend que les souches résidentes :

plot_residency_resident_dens_self

On observe que cette corrélation disparaît quand on ne considère que les souches résidentes. Ceci suggère que la densité propre d’une souche est un indicateur de si la souche est résidente / transiente plutôt qu’un indicateur du temps de résidence.

Temps de résidence et densité globale chez l’hôte

Si on prend toutes les souches :

plot_residency_dens_glob

On observe une corrélation positive entre la densité totale et les temps de résidence quand on considère toutes les souches.

Si on ne prend que les résidentes :

plot_residency_resident_dens_glob

Si on ne considère que les résidents il n’y a aucune corrélation. Ceci fait donc penser à un effet de choix entre résident et transient de la densité globale plutôt que sur les temps de résidence en eux mêmes.

Temps de résidence et sexe

On va prendre les temps de résidence log scale car on le voit mieux sur les plots.

Si on prend toutes les souches :

plot_logresidency_sex

On observe une augmentation du temps de résidence chez les femmes (sex2) en considérant toutes les souches.

Si on ne prend que les résidentes :

plot_logresidency_resident_sex

On observe que l’effet se maintient en enlevant les transientes. Peut être que le sexe augmente donc réellement le temps de résidence plutôt que de juste sélectionner les résidentes / transientes.

Régression linéaire multiple mixte des temps de résidence pour toutes les souches

Dans les deux cas on a d’abord considéré des modèles mixtes mais l’effet n’était jamais significatifs. Les sélection de modèle ont été faite par comparaison d’AIC sur toutes les combinaisons raisonnables de variables. Nous mentionnerons aussi les variables qui sortaient dans les modèles compétitifs (Delta AIC < 2).

On présente donc ici des modèles linéaires sans effet mixte.

Brut
summary(best_lm_residency)
## 
## Call:
## lm(formula = residency ~ group + log.density + log.dens.self + 
##     sex + voyage_event, data = lm_df_residency)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -48.703 -15.207  -5.391   4.355 116.965 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        19.420      6.570   2.956 0.003303 ** 
## groupA.2           12.432      4.563   2.724 0.006731 ** 
## groupB1             2.105      4.536   0.464 0.642826    
## groupB2.1          -9.372     14.476  -0.647 0.517712    
## groupB2.2           1.295      8.737   0.148 0.882200    
## groupB2.3          18.272      4.818   3.793 0.000172 ***
## groupC             -3.230     12.999  -0.248 0.803890    
## groupD.1           27.422      5.256   5.218 2.93e-07 ***
## groupD.2            1.129      7.573   0.149 0.881555    
## groupE              2.707      7.239   0.374 0.708592    
## groupF             23.371      8.895   2.627 0.008937 ** 
## groupG            -10.848     20.267  -0.535 0.592789    
## log.density       -10.889      2.495  -4.365 1.63e-05 ***
## log.dens.self      12.112      2.356   5.142 4.28e-07 ***
## sex2                5.544      3.049   1.819 0.069714 .  
## voyage_eventTRUE    4.233      2.834   1.494 0.136046    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 28.22 on 396 degrees of freedom
## Multiple R-squared:  0.2045, Adjusted R-squared:  0.1743 
## F-statistic: 6.785 on 15 and 396 DF,  p-value: 4.13e-13
Anova(best_lm_residency)
## Anova Table (Type II tests)
## 
## Response: residency
##               Sum Sq  Df F value    Pr(>F)    
## group          37971  11  4.3339 3.930e-06 ***
## log.density    15172   1 19.0493 1.628e-05 ***
## log.dens.self  21058   1 26.4393 4.284e-07 ***
## sex             2634   1  3.3076   0.06971 .  
## voyage_event    1777   1  2.2312   0.13605    
## Residuals     315407 396                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

De manière très significative les trois facteurs bactériens sortent.

On voit que le sexe et le fait d’avoir fait un voyage sont sélectionnés. Les effets ne sont pas significatifs.

La sélection de modèle a le plus souvent fait apparaître le sexe et le fait d’avoir fait en voyage (en plus du phylogroupe, de la densité globale et de la densité propre).

Log-scaled
summary(best_lm_logresidency)
## 
## Call:
## lm(formula = residency_scaled_log_groups ~ log.density + log.dens.self + 
##     sex + voyage_event, data = lm_df_logresidency)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.54438 -0.20929 -0.06727  0.10478  1.46003 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       0.58755    0.06431   9.137  < 2e-16 ***
## log.density      -0.10994    0.02722  -4.038 6.43e-05 ***
## log.dens.self     0.12575    0.02550   4.931 1.19e-06 ***
## sex2              0.06273    0.03385   1.853   0.0646 .  
## voyage_eventTRUE  0.04639    0.03193   1.453   0.1471    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3214 on 407 degrees of freedom
## Multiple R-squared:  0.08309,    Adjusted R-squared:  0.07408 
## F-statistic: 9.221 on 4 and 407 DF,  p-value: 3.858e-07
Anova(best_lm_logresidency)
## Anova Table (Type II tests)
## 
## Response: residency_scaled_log_groups
##               Sum Sq  Df F value    Pr(>F)    
## log.density    1.684   1 16.3084 6.433e-05 ***
## log.dens.self  2.511   1 24.3150 1.194e-06 ***
## sex            0.355   1  3.4343   0.06458 .  
## voyage_event   0.218   1  2.1102   0.14710    
## Residuals     42.036 407                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

On a les mêmes résultats que sur les temps de résidence bruts.

Régression linéaire multiple mixte des temps de résidence pour les souches résidentes

Cette approche consistait à ne garder que les souches “résidentes” c’est à dire qui reste plus de 14 jours dans l’intestin.

Cette approche permet de mesurer l’influence directe des facteurs hôtes et bactériens sur le temps de résidence et pas sur la propension à devenir transiente ou résidente comme la méthode précédente.

On considère uniquement les temps de résidence brut des souches résidentes.

On a sélectionné par une comparaison exhaustive de tous les modèles (via dredge) en forçant certaines variables (pour réduire en complexité et en temps de calcul).

summary(best_lm_residency_resident)
## 
## Call:
## lm(formula = residency ~ nombre_enfants, data = lm_df_resident)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -49.900 -34.811  -8.781  28.630  83.219 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          64.781      3.813  16.988   <2e-16 ***
## nombre_enfantsTRUE   13.119      9.184   1.428    0.156    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 37.36 on 114 degrees of freedom
## Multiple R-squared:  0.01758,    Adjusted R-squared:  0.008967 
## F-statistic: 2.041 on 1 and 114 DF,  p-value: 0.1559
Anova(best_lm_residency_resident)
## Anova Table (Type II tests)
## 
## Response: residency
##                Sum Sq  Df F value Pr(>F)
## nombre_enfants   2849   1  2.0406 0.1559
## Residuals      159142 114

On voit que seul le nombre d’enfants sort dans le meilleur modèle et de manière significative. Autrement dit, en enlevant les souches transientes (et donc en essayant d’expliquer les temps de résidence des souches résidentes) on ne trouve aucun facteurs qui les affectent.

Peut être est ce un manque de puissance, ou simplement que le temps que reste une souche dans l’intestin est gouvernée par autre chose de plus fort (pas si elle arrive à se fixer ou non ce qui correspond au statut résident / transient).

Statut de résident / transient et facteurs hôtes

On définit la résidence comme un temps de résidence supérieur à 14 jours dans un hôte.

Différences en moyenne du statut de résident en fonction des facteurs hôtes

Statut de résidence et phylogroupe
plot_residency_status_phylogroup

On observe que le phylogroupe semble clairement modifier la proportion de résident transient chez les souches. Certains phylogroupes possèdent beaucoup de résidentes par rapport aux transientes et sont donc appelés phylogroupes résidents (B2.3 par exemple).

Statut de résidence et densité propre
plot_residency_status_dens_self

On voit que les souches résidentes sont en moyenne plus denses que les souches transientes. Ceci n’est pas étonnant car les souches résidentes sont celles qui se sont fixés dans l’intestin.

Encore une fois la densité propre semble être un bon discrimant pour savoir si la souche est transiente ou résidente.

Statut de résidence et densité globale
plot_residency_status_dens_glob

On observe que les souches résidentes sont toutes dans des hôtes avec de grande densité. Ceci pourrait être leur propre effet car on sait maintenant que les souches résidentes ont de fortes densité propre.

Statut de résidence et régime alimentaire
plot_residency_status_regime

Certains régimes semblent favoriser plutôt certaines souches. Ce n’est pas très puissant.

Statut de résidence et âge
grid.arrange(plot_residency_status_age, plot_residency_status_age_group)

On voit que deux des personnes âgées possèdent bcp de résidentes ce qui pousse à sous estimer l’effet de le baisse de souches transientes chez les personnes âgées. Ce facteur âge semble intéressant.

Régression logistique multiple du statut de résidence

On va expliquer cette variable à deux modalités avec les facteurs hôtes à l’aide d’un modèle logistique où on inclue un effet mixte de l’hôte (car non indépendance des lignes de notre df).

On a fait toutes les analyses sur des modèles mixtes mais au final l’effet mixte était négligeable. On ne présente donc pas ici la version mixte des résultats.

On fait un modèle de régression logistique sur la probabilité d’être résident ou non. Pour cela on utilise les GLM. On a fait une sélection sur toutes les combinaisons de variables et comparés les modèles par leur AIC. Un peu après on donne les autres facteurs hôtes qui sortaient dans les modèles compétitifs.

summary(best_glm_resident)
## 
## Call:
## glm(formula = resident_status ~ group + log.density + log.dens.self + 
##     nombre_foyer + age_group + nombre_enfants, family = binomial(), 
##     data = glm_df_resident)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          -4.39383    1.05257  -4.174 2.99e-05 ***
## groupA.2              1.59151    0.50670   3.141  0.00168 ** 
## groupB1               0.72753    0.53887   1.350  0.17698    
## groupB2.1           -14.80800 1020.02730  -0.015  0.98842    
## groupB2.2             0.77955    0.93493   0.834  0.40439    
## groupB2.3             2.23494    0.50985   4.384 1.17e-05 ***
## groupC              -13.94869  998.73998  -0.014  0.98886    
## groupD.1              2.77353    0.54965   5.046 4.51e-07 ***
## groupD.2              2.11671    0.71642   2.955  0.00313 ** 
## groupE                1.17887    0.91001   1.295  0.19517    
## groupF                4.17973    1.03557   4.036 5.43e-05 ***
## groupG              -14.52209 1561.41491  -0.009  0.99258    
## log.density          -2.07866    0.47903  -4.339 1.43e-05 ***
## log.dens.self         2.74320    0.48304   5.679 1.35e-08 ***
## nombre_foyer         -0.18550    0.08575  -2.163  0.03053 *  
## age_groupbelow_40     2.40726    0.96426   2.496  0.01254 *  
## nombre_enfantsTRUE    1.98386    0.99254   1.999  0.04563 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 489.80  on 411  degrees of freedom
## Residual deviance: 359.23  on 395  degrees of freedom
## AIC: 393.23
## 
## Number of Fisher Scoring iterations: 15
Anova(best_glm_resident)
## Analysis of Deviance Table (Type II tests)
## 
## Response: resident_status
##                LR Chisq Df Pr(>Chisq)    
## group            65.210 11  9.837e-10 ***
## log.density      19.763  1  8.767e-06 ***
## log.dens.self    35.341  1  2.768e-09 ***
## nombre_foyer      4.832  1   0.027931 *  
## age_group         8.209  1   0.004169 ** 
## nombre_enfants    4.872  1   0.027295 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

La probabilité d’être résident ou non dépend de l’âge, du nombre d’enfants et du nombre de personnes dans le foyer.

Lors de la sélection de modèle seul ce modèle est sorti.

Probabilité d’être résident / transient et déterminant hôtes / bactériens

Nous pouvons maintenant inférer de combien les facteurs hôtes change la probabilité d’être résident ou transient grâce aux Odds Ratio (OR).

plot_forest_or

Sur ce plot on peut voir les Odds Ratio en fonction des facteurs hôtes avec pour référence une souche portée par : un sujet du groupe âge au dessus de 40 ans, ayant une densité de bactérie moyenne, sans enfants et avec un nombre de personne dans le foyer moyen. La souche fait partie du phylogroupe A.1 et la souche est elle même à une densité moyenne par rapport aux autres souches.

Nombre d’observations des souches et facteurs hôtes

Le nombre d’observation d’une souche est la composante de deux évènements : la capacité à s’installer dans un hôte (sans être éliminé par le transit) puis la capacité à persister dans le microbiote. Il n’y a pas de raisons que les facteurs qui influencent l’un soient les mêmes que ceux qui influencent l’autre.

Une souche est, pour un hôte, soit transiente soit résidente. Ce statut peut varier en fonction de l’hôte ou même du moment où une même souche infecte un hôte. Une souche qui ne s’installe pas est donc observé une seule fois (ceci est modélisé par une Bernoulli) et une souche qui s’installe est observé un certains nombre de fois qui peut être modélisé par une Poisson ou une Binomiale Négative ou une géométrique.

Dans notre cas on observe une distribution avec bcp de poids en 1 et ensuite distribuée selon une loi géométrique (on attend l’évènement de clairance) sur les valeurs positives. On peut modéliser ceci par un modèle zero-inflated ou un modèle de Hurdle. On va dans la suite tout décaler de -1 pour avoir un poids en 0 et pas en 1 comme montré ci dessous (on peut voir cette distribution comme le nombre d’observations de la souche en tant que résidente) :

plot_distrib_number_event

On choisit un modèle zero-inflated plutôt que Hurdle car les zéros proviennent soit de souches ne pouvant jamais s’installer dans l’intestin (vrai transiente) soit de souches résidentes n’ayant pas potentialisé son installation (fausse transiente) et s’étant fait éliminer par le transit (deux sources de zéros donc zero-inflated mieux que Hurdle).

Ce modèle permet de trouver les variables influant la partie binaire de l’expérience ainsi que les variables influant la partie nombre d’évènements de l’expérience. C’est en quelque sorte un condensé des deux modèles précédents (lmm et glm logistique).

On utilise un modèle négatif binomial pour la partie comptage en fixant le paramètre de dispersion à 1 pour ressembler à la distribution géométrique. On présente ici le meilleur modèle sélectionné par comparaison d’AIC.

summary(modele_selected_finaliteration)
## 
## Call:
## zeroinfl(formula = number_event ~ 1 | group + log.density + log.dens.self + 
##     nombre_foyer, data = df, dist = "negbin")
## 
## Pearson residuals:
##     Min      1Q  Median      3Q     Max 
## -0.9964 -0.4143 -0.2563 -0.1163 10.3492 
## 
## Count model coefficients (negbin with log link):
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   1.1558     0.1045  11.064   <2e-16 ***
## Log(theta)    0.5575     0.3356   1.661   0.0967 .  
## 
## Zero-inflation model coefficients (binomial with logit link):
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)     2.3471     0.4456   5.267 1.39e-07 ***
## groupA.2       -1.6716     0.5456  -3.064  0.00219 ** 
## groupB1        -0.6213     0.5669  -1.096  0.27308    
## groupB2.2      -0.7275     0.9977  -0.729  0.46588    
## groupB2.3      -2.4314     0.5735  -4.240 2.24e-05 ***
## groupD.1       -2.9926     0.6466  -4.628 3.69e-06 ***
## groupD.2       -1.9323     0.7626  -2.534  0.01129 *  
## groupE         -0.8232     0.9365  -0.879  0.37941    
## groupother     -1.5819     0.7488  -2.113  0.03462 *  
## log.density     2.5364     0.5512   4.601 4.20e-06 ***
## log.dens.self  -3.1840     0.5875  -5.420 5.97e-08 ***
## nombre_foyer    0.2870     0.1635   1.756  0.07912 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Theta = 1.7463 
## Number of iterations in BFGS optimization: 20 
## Log-likelihood: -443.1 on 14 Df

Le modèle sélectionne le phylogroupe, les deux logs densités et le nombre de personnes dans le foyer pour la partie inflation et aucune variable pour la partie count.

Aucun de nos facteurs ne semblent avoir une influence significative sur la partie count. Ceci est cohérent avec les résultats sur les modèles linéaires avec seulement les souches résidentes. On a un fort signal que le temps de résidence d’une souche dans l’intestin après sa mise en place en temps que résidente (+ de 14 jours) est indépendant des facteurs hôtes et bactériens considérés dans notre étude. Ceci est assez étonnant et intéressant.

On observe en revanche une augmentation (par rapport à la référence) des probabilités d’être transient chez des personnes avec un nombre plus élevé de personnes dans leur foyer que la moyenne et une densité dans le microbiote plus importante.

Ces résultats sont aussi cohérent avec les facteurs qui sélectionne le fait d’être résident décelé tout à l’heure dans la régression logistique. Cette fois ci l’âge ne sort pas directement (malgré sa présence dans la sélection de modèle) mais le nombre de personnes dans le foyer est certainement corrélé (voir corrélation metadata.rmd)

Quels facteurs hôtes influençent la résidence ?

Plusieurs effets ressortent que ce soit des déterminants bactériens ou hôtes.

Les logs densités n’ont pas vraiment pour effet d’augmenter les temps de résidence à proprement dit. Les logs densités ont plutôt pour effet de pousser ou non les souches à devenir résidente.

Si la souche a une densité focale forte c’est qu’elle s’est établie et donc qu’elle peut devenir résidente (ceci augmente indirectement son temps de résidence).

Si la souche est dans un intestin avec forte densité alors elle va avoir du mal à s’établir car il y a déjà une souche résidente, ou alors la souche est la résidente.

Les phylogroupes ont clairement des effets sur le statut résidente ou transiente. Certains phylogroupes ont plus de chances de donner une souche résidente ou transiente. Par contre ce facteur ne modifie pas vraiment le temps dans l’intestin des souches résidentes.

Pour les facteurs hôtes, certains poussent les souches à devenir transiente ou résidente et d’autres poussent les souches à rester plus longtemps dans l’intestin. Globalement les facteurs hôtes modifie la propension d’une souche à être résidente ou transiente. Mais certains semblent aussi influencer la longueur.

Ressortent souvent :

  • Le nombre d’enfants, le nombre de personnes dans le foyer et l’âge sortent comme des variables très corrélées et possèdent le même effet de réduction du temps de portage et d’augmentation de la probabilité de porter des souches transientes (pour un âge plus élevé).
  • Le sexe sort comme une variable augmentant les temps de résidence pour les femmes.
  • Le fait d’avoir fait un voyage sort aussi.
  • Le régime est aussi une variable qui sort souvent dans les modèles influençant la résidence.

Il est déjà connu que les femmes ont un transit plus long que les hommes et qu’il existe une différence entre les phylogroupes portés par les femmes ou les hommes. Ceci pourrait être en rapport avec les UTI plus prévalentes chez les femmes que les hommes. Nos résultats sont en accords avec une plus longue résidence chez les femmes que chez les hommes des souches de E. coli commensales. Le microbiote féminin sélectionnerait accidentellement des souches résidentes qui coïncident avec celles causant les UTI. La sélection pourrait venir de temps de transit plus longs. Ceci apporterait une explication aux UTI même si elles sont en majorité aujourd’hui expliquées par des différences anatomiques entre hommes et femmes.

Une autre possibilité pour expliquer plus de résidence chez les femmes pourraient être que les souches transientes sont éliminées au rythme du transit de l’hôte. Ainsi comme celui ci est plus long chez les femmes, ceci ferait une élimination moins rapide et donc résulterait en un signal de temps de résidence plus long chez la femme (sans vraiment une autre explication).

Le nombre de personnes dans le foyer est une covariable qui a un effet significatif sur la probabilité pur une souche de devenir résidente ou non. Plus il y a de personnes dans le foyer d’un hôte moins ses souches ont de chances d’êtres résidentes. Cet effet semble assez artificiel au vu de sa faible significativité dans les analyses.

En général la diet et la précarité ne sont pas des facteurs influençant directement la résidence des souches. Ceci est peut être du à un manque de puissance, les groupes de régimes étant en eux mêmes assez peu significatifs (du à un régime relativement équilibré entre chaque patients et à un partage d’un même environnement socio-économique). Le fait que la diet ne modifie pas la résidence pourrait aussi venir du fait que la principale matrice dans laquelle vit E. coli est principalement dépendante de l’hôte en lui même et pas de la diet directement. Ceci ferait que les changements légers de diet n’affectent pas tellement la dynamique des E. coli. Mais, sachant que le sexe est dépendant de la diet, de la précarité et de l’âge (dans nos données) peut êtres que ces dernières variables s’expriment en partie via l’effet sexe.

Nous voyons qu’il est assez difficile avec nos données actuelles (46 hôtes et 400 souches) d’obtenir des facteurs hôtes qui influence significativement la résidence. Ceci n’est pas vraiment étonnant et l’arrivée prochaine d’autres données va pouvoir éclaircir ce point.

Diversité et facteurs hôtes

La diversité est un descripteur de la dynamique des E. coli dans l’intestin. Nous allons nous intéresser à la richesse en terme de souches bactériennes pendant la cohorte.

On a aussi considéré cette mesure au niveau phylogroupe mais les résultats ne sont pas montrés ici.

Notre mesure de diversité est très dépendante de la façon dont on sample notre cohorte. Par exemple il est normal de voir plus de richesse si la cohorte a duré plus longtemps chez un hôte. Pour faire face à ces biais on va tester différents modèles d’explications par les facteurs hôtes :

  • Sans prendre en compte le biais
  • En débiaisant par ajout d’une variable explicative dans le modèle

Au final on présente ici le modèle débiaisé par une variable décrivant le nombre de sample dans la cohorte pour chaque hôte.

Représentons l’évolution de la diversité des souches chez un hôte. On prend la richesse spécifique à chaque sample (valeur qu’on expliquera pas par la suite).

Comme on ne capte que maximum 5 souches par samples on a enfaîte la diversité des souches majoritaires dans l’intestin. Les estimations sont donc assez biaisées mais permettent d’établir une première approche.

Richesse des souches

On mesure le nombre de souches différentes pendant la cohorte et par hôte. Soit Ni le nombre de bactéries différentes dans l’hôte i. Alors on va expliquer les Ni à l’aide des i hôtes.

Notre façon de mesurer la richesse est dépendante du fait que tous les hôtes n’ont pas été samplés pareil. On a donc ajouté un facteur explicatif “cohort_sample” permettant de décoreller les effets des hôtes par rapport aux effets du sampling.

summary(best_lm_diversity)
## 
## Call:
## lm(formula = global_diversity ~ age + poids + voie_accouchement + 
##     allaitement, data = lm_df_diversity)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.059114 -0.018698 -0.000376  0.018488  0.069652 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         0.063675   0.005916  10.763 3.06e-13 ***
## age                -0.009544   0.005432  -1.757   0.0868 .  
## poids               0.007434   0.004816   1.544   0.1308    
## voie_accouchement2 -0.021104   0.012550  -1.682   0.1006    
## voie_accouchement3 -0.014743   0.020419  -0.722   0.4746    
## allaitement2        0.020793   0.011750   1.770   0.0846 .  
## allaitement3        0.024321   0.017735   1.371   0.1781    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.02996 on 39 degrees of freedom
## Multiple R-squared:  0.1709, Adjusted R-squared:  0.04337 
## F-statistic:  1.34 on 6 and 39 DF,  p-value: 0.263
Anova(best_lm_diversity)
## Anova Table (Type II tests)
## 
## Response: global_diversity
##                     Sum Sq Df F value  Pr(>F)  
## age               0.002772  1  3.0874 0.08675 .
## poids             0.002139  1  2.3827 0.13076  
## voie_accouchement 0.002706  2  1.5069 0.23422  
## allaitement       0.003432  2  1.9116 0.16145  
## Residuals         0.035011 39                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ainsi, en considérant la richesse spécifique débiaisé par ajout de variable on a que l’allaitement et l’accouchement sortent comme des variables expliquant un peu la diversité, l’âge (via le nombre d’enfants) et le poids sortent aussi.

Le sens des coefficients est :

  • Les personnes non allaitées ont plus de diversité (significatif).
  • Les personnes nées par césarienne ont moins de diversité (significatif).
  • Les personnes grosses ont plus de diversité.
  • Les personnes ayant des enfants (et donc vieux) ont moins de diversité.

Quels facteurs hôtes influençent la diversité ?

La richesse globale au long de la cohorte accumulée par les hôtes est dépendante de manière assez significative de plusieurs effets hôtes : l’allaitement, la voie d’accouchement, le poids et le nombre d’enfants.

Le nombre d’enfants sort probablement à cause de l’âge et de sa réduction de diversité qui l’accompagne (due à notre structuration un peu particulière des données avec beaucoup d’étudiants qui n’ont pas d’enfants).

Le sexe n’est pas nouveau, on sait d’après les analyses de résidence qu’il existe un signal dans nos données tendant à rendre les souches chez les femmes plus résidentes ce qui a forcément des répercussions sur le nombre de souches différentes portées par celles-ci.

Chose nouvelle l’allaitement et la voie d’accouchement sortent comme les deux facteurs qui expliquent la diversité intrahôte pendant la cohorte. Ceci est étonnant à deux égards : nous considérons des adultes qui ont tous plus de 18 ans et nous considérons E. coli qui est connu pour avoir un turnover au niveau des souches assez forts (prouvé dans Rethinking de Martinson). Dans notre cas, le sens est celui attendu c’est à dire que les actions qui exposent le nourrisson à plus de E. coli sont celles qui causent le plus de diversité une fois adulte. Il est connu que les E. coli sont parmi les premières à coloniser et qu’il y a un effet de fondation du microbiote par les premières souches, mais pas forcément pour E. coli et encore moins pendant aussi longtemps.

Il faut garder à l’esprit que ce ne sont peut être pas des vérités générales mais il est intéressant de le noter. Plus de patients dans la cohorte nous permettra d’en dire plus.

Diversité en fonction du temps

On peut s’intéresser à l’effet des antibiotiques ou des voyages sur la diversité. Plus particulièrement nous allons représenter le nombre de bactéries (entre 1 et 5) samplées après un voyage, de prise d’antibiotique, des deux ou bien de rien.

plot_diversity_event

Faire un voyage semble légèrement augmenter le nombre de bactéries samplées par rapport à ne subir aucun évènement.

En revanche, prendre un traitement antibiotique semble baisser le nombre de bactéries samplées après la prise. Faire un voyage après (ou avant) avoir pris un antibiotique semble rééquilibrer la diversité au niveau avant (ou après) antibiotique (car la moyenne remonte vers celle du groupe “Aucun”).

Tout ceci n’a pas l’air très puissant mais les observations vont dans le sens attendu et donc il est intéressant de le noter. En revanche cette approche gomme l’effet hôte.

Turnover et facteurs hôtes

On calcule le turnover comme la moyenne entre les distances de BC entre chaque sample, pour chaque hôte. Cette valeur décrit le renouvellement des souches entre deux samples et est donc affectée par la résidence (via la disparation d’une souche) et la colonisation (via l’apparition d’une souche) dont on se doute qu’elle est fortement corrélé à la diversité.

Visualisation du turnover

Visualisation des BC en fonction de l’hôte

plot_mean_bc

On voit que les BC varient en fonction des hôtes. Certains ont en moyenne des BC plus faibles que d’autres indiquant une variabilité dans le renouvellement des souches chez chaque hôtes.

Les moyennes sont élevées (contrairement à celles dans le papier de Martinson). Ceci pourrait provenir du fait qu’on a plus de diversité en France et donc entre les samples on change beaucoup plus qu’aux US.

Turnover et âge

Pour augmenter la puissance de la variable âge on l’a catégorisé.

plot_turnover_age_group

L’âge semble affecter le turnover, les vieux ont moins de turnover que les jeunes.

Turnover et sexe

plot_turnover_sex

Les femmes semblent avoir moins de turnover que les hommes.

Modèle linéaire pour le turnover et les déterminants hôtes

Dans un sens, cette partie est donc une fusion de l’explication de la résidence et de la diversité.

summary(best_turnover_lm)
## 
## Call:
## lm(formula = mean_bray_curtis ~ sex + age_group + nombre_foyer, 
##     data = df_turnover)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.33662 -0.11631 -0.03769  0.13136  0.35581 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        0.67370    0.07789   8.649 2.05e-10 ***
## sex2              -0.17399    0.06181  -2.815  0.00777 ** 
## age_groupbelow_40  0.12063    0.06690   1.803  0.07952 .  
## nombre_foyer      -0.02951    0.01858  -1.588  0.12072    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1922 on 37 degrees of freedom
## Multiple R-squared:  0.2327, Adjusted R-squared:  0.1705 
## F-statistic: 3.741 on 3 and 37 DF,  p-value: 0.01917
Anova(best_turnover_lm)
## Anova Table (Type II tests)
## 
## Response: mean_bray_curtis
##               Sum Sq Df F value  Pr(>F)   
## sex          0.29264  1  7.9246 0.00777 **
## age_group    0.12006  1  3.2513 0.07952 . 
## nombre_foyer 0.09317  1  2.5229 0.12072   
## Residuals    1.36635 37                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Cette sélection par AICc donne que le sexe et l’âge ressorent. Le nombre de personnes dans le foyer n’est pas significativement différent de 0.

Une BC moyenne faible veut dire un petit turnover entre les samples consécutifs.

Le sexe affecte très fortement le turnover moyen des souches entre deux évènements de sampling. Chez les femmes on observe moins de renouvellement entre les souches ce qui parait en cohérence avec les temps plus longs de résidence des souches.

L’âge semble jouer sur le renouvellement des souches. Plus de renouvellement chez les jeunes que chez les vieux.

Dynamiques interphylogroupe dans la population

Beta-diversité entre les hôtes au niveau du phylogroupe

Nous allons calculer la dissimilarité (à l’aide d’une distance de Bray-Curtis) et voir si on peut dégager par clustering certains groupes d’hôtes avec des similarités entre eux au niveau de la prévalence des phylogroupes portés. Ceci pourrait nous renseigner sur la présence ou pas de combinaisons de phylogroupes portés par une partie de la population.

On a d’abord fait une heatmap avec clusterisation avec la présence/absence des phylogroupes chez chaque hôtes, celle-ci a montré que certains phylogroupes sont souvent associés ensemble (A.1 et A.2 et B.1 et D.1). Puis avec les distance de Bray-Curtis on a réalisé la même chose. On l’a aussi fait sur la prévalence de chaque phylogroupe et la Bray-Curtis avec les prévalences. C’est ce qu’on utilise dans la suite.

Ceci a révélé 2 cluster (cluster 1 et 2) avec des similarités très fortes entre les hôtes et 1 cluster (cluster 3) avec le reste des hôtes (sans similarité particulière entre eux ni avec les autres hôtes).

On représente ici la prévalence de chaque phylogroupe chez nos cluster comparés à la population globale de notre cohorte (donc nos 3 cluster regroupés).

print(summary_table_preval)
## # A tibble: 4 × 13
##   group    A.1   A.2    B1     C   D.1     F   D.2     G  B2.3  B2.1  B2.2     E
##   <chr>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Clust…  9.08  11.4 12.5  0.731  25.8  2.44 0.391 0      31.9 0.417  2.13  3.12
## 2 Clust… 14.0   31.1  7.55 2.04   15.5  0    5.87  0      21.4 0      2.56  0   
## 3 Clust… 13.6   19.3 15.5  0.469  12.2  9.16 4.57  0.414  17.0 0.874  3.45  3.44
## 4 Global 12.1   18.3 13.3  0.799  17.5  5.43 3.31  0.207  22.8 0.582  2.86  2.81

Les hôtes du cluster 1 ont majoritairement (et par rapport à la moyenne) des D.1 et des B2.3 mais peu de D.2, F et A.2 (par rapport à la moyenne).

Les hôtes du cluster 2 ont majoritairement (et par rapport à la moyenne) des A.2 et D.2 et peu de B.1, F et E.

Mais en effectuant un PERMANOVA pour voir si nos cluster (et donc potentiels groupe d’hôtes avec un profil en phylogroupe similaire) sont significatif il ne sort rien.

print(permanova_model$aov.tab)
## Permutation: free
## Number of permutations: 999
## 
## Terms added sequentially (first to last)
## 
##           Df SumsOfSqs MeanSqs F.Model      R2 Pr(>F)
## group      2    0.5962 0.29809  1.4013 0.06119   0.18
## Residuals 43    9.1468 0.21272         0.93881       
## Total     45    9.7430                 1.00000

Ces analyses suggèrent la présence de phylogroupes plus souvent portés ensemble que ce que ferait l’aléatoire, pouvant mener à certains profils de phylogroupe dans le microbiote. Mais il faut garder en tête qu’on a samplé uniquement 5 souches et donc que probablement d’autres phylogroupes étaient portés par les hôtes mais ont été ratés.

Problème de puissance certainenement.

Ce qu’on peut dire c’est que certains phylogroupes ont l’air, quand associés, de s’épanouir dans le microbiote assez pour pouvoir être détectés par notre expérience. Ainsi, ceci pose la question d’une éventuelle coopération entre des phylogroupes ou même des exclusions.

Portage simultané de deux souches : dynamique écologique entre phylogroupes

Le fait que les densités globales et focales affectent significativement la résidence (ie le portage) pourrait indiquer des dynamiques de compétition / facilitation. De plus, au vu des résultats de la partie précédente, il semble intéressant de considérer le co-portage de certaines souches au niveau du phylogroupe : la fréquence de co-portage de deux phylogroupes est elle le fruit du hasard ?

Pour explorer les portages simultanées de souches on va utiliser plusieurs manières.

Exploration par calcul de proportion de couples théorique à partir des proportions de phylogroupes observées

On considère que tous les hôtes forment un sample représentatif de la population française au niveau des E. coli. On calcule à partir de toutes les E. coli présentes dans la cohorte des proportions pour chaque phylogroupes. Ensuite on calcule les proportions de chaque couples de souches (de phylogroupes différents ou pas) en posant que (si p_i est la proportion du phylogroupe i et p_j du j) on observe un couple (Souche phylogroupe i , Souche phylogroupe i) à proportion p_i² et un couple (Souche phylogroupe i , Souche phylogroupe j) à proportion 2p_ip_j.

On va ensuite regarder dans notre cohorte la proportion de chaque couple. Plusieurs manières de considérer des couples :

  • Soit entre deux souches résidentes qui étaient là en même temps.
  • Soit entre deux souches transientes qui co-infectent (assez pour être trouvées par notre méthode)
  • Soit entre une résidente et une transiente qui infecte.

Ces trois dynamiques vont probablement donner des résultats différents si on compare la théorie et l’attendu de proportion des couples.

Ce modèle ne prend pas en compte d’effet hôte.

On va diviser la proportion observée pour chaque couple par la proportion théorique pour caractériser la déviance quant au modèle nul. On peut ensuite représenter sous forme d’une heatmap chaque couple et leur index de déviance. On classe les phylogroupes par temps moyens de résidence afin de garder en compte les temps moyens de résidence et voir si des pattern se dégagent.

heatmap_coportage

Les résidents sont A.2, B2.3, D.1 et F. Les transients sont les autres.

Un coportage entre deux transientes est une coinfection. Un coportage entre transient et résident est soit une coinfection soit une coexistence passagère dans le microbiote. Un coportage entre deux résidentes est soit une coinfection soit une coexistence longue dans le microbiote (ou en tout cas un essai, en majorité).

On observe que pour les couples de souches résidentes de différents phylogroupes on en observe moins que prévu par une association indépendante. Il y a donc une compétition entre les souches résidentes (première preuve assez forte d’une compétition entre phylogroupes de E. coli dans l’intestin).

On observe ensuite que pour les couples de souches résidentes du même phylogroupe on observe soit une association indépendante soit un effet bénéfique du coportage.

On observe un effet bénéfique du coportage entre les couples de souches transientes d’un même phylogroupe. Ceci montre que les coinfections entre deux souches d’un même phylogroupe sont fréquentes et positives pour les souches.

On observe que pour les couples de transientes de phylogroupe différents on a soit des effets neutres soit positifs. L’association entre deux souches transientes n’est pas indépendante, elle semble facilitée car on l’observe plus que théoriquement.

Certaines associations résidentes transientes semblent aussi facilitée.

On observe que le phylogroupe B2.3 est globalement associée négativement à tous les autres phylogroupes (sauf lui même) car on observe que les proportions observées de couples B2.3 - X sont plus faibles que celles prédites. Ceci pourrait faire penser à une espèce de toxicité des B2.3 envers les autres phylogroupes et donc pourrait expliquer pourquoi il augmente en prévalence ces dernières années. B2.3 est connu comme ayant plus de VAG que les autres et ceci pourrait être une preuve de l’effet des VAG sur l’augmentation de la capacité à faire de la compétition (même chez les commensales).

Théorie sur le papier de Julie Marin sur “…Increased Virulence and Resistance over years..” : B2.3 porte assez peu de gène de résistance mais pas mal de gène de virulence. Sa capacité à augmenter en étant plus compétitive que les autres pourrait être l’explication de pq la virulence est ST-driven et pas la résistance (car B2.3 en augmentant n’augmente pas bcp les proportions de virulence, car porte peu de gènes de résistance, donc c’est autre chose) !

Exploration par calucl de distribution de proportions de couples théoriques à partir d’un bootstrap sur les proportions de couples / phylogroupes observées

Ce modèle peut ou pas (en fonction de comment on le définit) prendre en compte des effets hôtes. Par contre il ne prend pas en compte les 3 façons de former un coportage entre deux souches.

On va simuler les distributions des proportions d’observations de chaque couples. Ce sont donc des proportions théoriques simulées. Pour calculer les distributions du nombre d’observations on garde l’effet hôte-phylogroupe en resamplant chaque couple par hôte et en gardant les fréquences observées de chaque phylogroupe dans chaque sample (via replace = FALSE) ou on resample directement toutes les souches qui ont pu créer un couple dans la population (peut être plus proche de la façon dont on a calculé les proportions théoriques dans la partie précédente).

On représente ici les distributions calculées en resamplant à partir d’un pool de souches commun aux hôtes (dans l’autre cas mentionné les distributions n’étaient pas les mêmes).

plot_geant_distrib_vs_observe_pop

On observe quand même que notre façon de calculer les distributions théoriques ne coincide pas vraiment avec les proportions théoriques de chaque couples (en bleu). Ceci pourrait modifier les résultats mis en lumière plus haut. Mais ce qui est rassurant c’est que souvent : la distribution théorique et la valeur théorique vont dans le même sens comparée à la valeur observée (il y a donc des chances pour que ca ne modifie pas grand chose).

Notre façon de trouver la valeur théorique de la proportion des couples n’est pas très optimale et reste assez grossière. Voyons si l’on peut l’améliorer.

Exploration par resimulation de notre cohorte pour calculer des distributions de proportions de couples théoriques

Une autre façon proposée par François serait de resimuler l’arrivée des souches chez l’hôte (avec leur résidence associée, mais si une résidence vaut tant c’est parce qu’elle était dans un contexte donnée, il n’est pas dit que quand la souche revient elle ait le même temps de résidence) mais à des temps différent pour voir quels couples serait créés.

Ce n’est pas très clair pour l’instant pour moi.

Courbe d’accumulation et profondeur sampling

On effectue des courbes d’accumulation (au sens écologique), chaque hôte représente un environnement pour les bactéries. On représente l’accumulation au niveau du phylogroupe pour chaque hôte en fonction des samples.

accumulation_plot

La ligne rouge correspond au sample où on avait atteint 90% de diversité de phylogroupes. En réalité au seuil que j’ai fixé la ligne rouge correspond au dernier sample qui a apporté de l’information au niveau phylogroupe (car pas assez de phylogroupe dans chaque hôte sur le temps de la cohorte).

On observe que chez la majorité des hôtes on atteint pas d’accumulation sur le temps de la cohorte. Ceci pourrait être expliqué par la diversité assez grande observée en Europe.

Chez certains hôtes on a l’impression d’atteinte d’un plateau (hôte 49, 43, 46).

On va représenter tous les hôtes en même temps pour voir s’il se dégage une dynamique.

combined_plot

Dynamique de E. coli et déterminants génétique